package eitwitter.normalization;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Tokenizer qui decoupe le texte uniquement suivant la taille
 * @author AH & PJ
 */
public class SizeTokenizer implements Normalizer{

	private int length;
	
	/** Expression reguliere pour rechercher et supprimer les URLs */
	final private String urls = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
	
	final private String nicknames = "@[a-zA-Z_]+";
	
	public SizeTokenizer(int length) {
		this.length = length;
	}

	
	
	@Override
	public HashMap<String, Integer> normalize(String text) {
		HashMap<String, Integer> tokens = new HashMap<String, Integer>();
		
		// Suppression des URLs dans le texte en entree
		Pattern p = Pattern.compile(urls);
		Matcher m = p.matcher(text);
		text = m.replaceAll("");
		
		// Suppression des pseudonymes des utilisateurs
		p = Pattern.compile(nicknames);
		m = p.matcher(text);
		text = m.replaceAll("");
		
		p = Pattern.compile(SymbolsTokenizer.symbols);
		m = p.matcher(text);
		text = m.replaceAll(" ");
		
		// Parcours de tous les mots trouves
		for(int i = 0; i <= text.length()-length; i+=length){
			
			String word = text.substring(i, i+length);
			
			if(tokens.containsKey(word)){
				
				// Si le mot est deja enregistre, incrementer
				tokens.put(word, tokens.get(word) + 1);
			} else {
				// Sinon, ajouter
				tokens.put(word, 1);
			}
		}
		return tokens;
	}
}
